package com.kakarote.admin.service;

import com.kakarote.admin.entity.BO.*;
import com.kakarote.admin.entity.PO.AdminConfig;
import com.kakarote.admin.entity.VO.ModuleSettingVO;
import com.kakarote.common.log.entity.OperationLog;
import com.kakarote.core.entity.BasePage;
import com.kakarote.core.entity.PageEntity;
import com.kakarote.core.feign.crm.entity.SimpleCrmEntity;
import com.kakarote.core.servlet.BaseService;

import java.util.List;

/**
 * <p>
 * 客户规则 服务类
 * </p>
 *
 * @author zhangzhiwei
 * @since 2020-04-27
 */
public interface IAdminConfigService extends BaseService<AdminConfig> {

    /**
     * 通过name查询系统配置
     *
     * @param names names
     * @return adminConfig
     */
    public List<AdminConfig> queryConfigListByName(Object... names);

    /**
     * 设置企业配置
     *
     * @param adminConfig config
     */
    public OperationLog setAdminConfig(AdminCompanyBO adminConfig);

    /**
     * 设置系统配置
     */
    public OperationLog setAdminConfig(String name, List<AdminConfigBO> list);

    /**
     * 查询企业配置
     *
     * @return adminCompanyBO
     */
    public AdminCompanyBO queryAdminConfig();

    /**
     * 忽略企业过期提醒
     */
    public void ignoreCompanyStatus();

    /**
     * 查询模块设置
     *
     * @return data
     */
    public List<ModuleSettingVO> queryModuleSetting();

    /**
     * 设置模块的禁用启用
     *
     * @param adminConfig data
     */
    public void setModuleSetting(AdminConfig adminConfig);

    /**
     * 查询系统配置
     *
     * @return data
     */
    List<AdminConfigBO> getAdminConfig(String name);

    /**
     * 根据名称查询配置信息
     *
     * @param name 名称
     * @return data
     */
    public AdminConfig queryConfigByName(String name);

    /**
     * 查询呼叫中心设置
     *
     * @return data
     */
    public ModuleSettingVO queryCallModuleSetting();


    /**
     * 修改客户规则根据adminConfig
     *
     * @param adminConfig:客户规则
     * @return
     */
    public void updateAdminConfig(AdminConfig adminConfig);


    /**
     * 核实密码
     *
     * @param adminInitDataBO:密码暂存类
     * @return data
     */
    String verifyPassword(AdminInitDataBO adminInitDataBO);

    /**
     * 模块初始化数据
     *
     * @param adminInitDataBO:密码暂存类
     * @return t, f
     */
    List<OperationLog> moduleInitData(AdminInitDataBO adminInitDataBO);

    /**
     * 查询设置根据名字和公司id
     *
     * @param name:名字
     * @return 客户规则
     */
    AdminConfig queryConfigByNameAndCompanyId(String name);

    /**
     * 查询设置根据名字和公司id跳过租户权限校验
     *
     * @param name:名字
     * @return 客户规则
     */
    AdminConfig queryConfigByNameAndCompanyIdSkip(String name);

    /**
     * 修改应用剩余次数
     *
     * @param name   应用名称
     * @param number 使用次数
     * @return 操作条数，0为操作失败
     */
    Integer updateAdminApplyNumberInfo(String name, Integer number);

    /**
     * 查询增值服务模块的状态
     *
     * @param queryBO a
     * @return a
     */
    List<ModuleSettingVO> queryModuleApply(AdminQueryModuleApplyBO queryBO);

    List<OperationLog> setMonetaryUnit(List<MonetaryUnitBO> monetaryUnitBOList);

    /**
     * 查询简单的module对象
     *
     * @param ids
     * @return
     */
    public List<SimpleCrmEntity> querySimpleEntity(List<Object> ids);

    /**
     * 查询所有数据
     *
     * @param search 搜索条件
     * @return list
     * @author yt
     * @since 2023-09-06
     */
    public BasePage<AdminConfig> queryModulePageList(PageEntity search);

    /**
     * 设置日志欢迎语
     *
     * @param stringList data
     */
    public void setLogWelcomeSpeech(List<String> stringList);

    /**
     * 查询日志欢迎语
     *
     * @return data
     */
    public List<LogWelcomeSpeechBO> getLogWelcomeSpeechList();
}
